﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MIAP.DataAccess.Interfaces;
using MIAP.Entidades;
using MIAP.DataAccess.Implementaciones.SQL;

namespace MIAP.Negocio
{
    public class AltaPerfilesNegocio
    {
        #region Campos

        /// <summary>
        /// Instancia para el acceso a datos de Administración de Perfiles.
        /// </summary>
        private readonly IPerfilesDao daoPerfiles;

        /// <summary>
        /// Instancia para el acceso a datos de funciones.
        /// </summary>
        private readonly IPerfilUrlDao daoPerfilUrl;

        #endregion

        #region Constructor

        /// <summary>
        /// Inicializa una nueva instancia <see cref="AltaPerfilesNegocio"/>
        /// </summary>
        public AltaPerfilesNegocio()
        {
            this.daoPerfiles = DataAccessFactory.Instance.CreatePerfilesDao();
            this.daoPerfilUrl = DataAccessFactory.Instance.CreatePerfilUrlDao();
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Agrega un nuevo proyeto
        /// </summary>
        /// <param name="proyecto"></param>
        /// <param name="user"></param>
        public void AddNewPerfil(PerfilInfo proyecto, string user)
        {
            this.daoPerfiles.AddNewPerfil(proyecto, user);
        }

        /// <summary>
        /// Agrega un nuevo proyeto
        /// </summary>
        /// <param name="proyecto"></param>
        /// <param name="user"></param>
        public void EditPerfil(PerfilInfo proyecto, string user)
        {
            this.daoPerfiles.EditPerfil(proyecto, user);
        }
        /// <summary>
        /// Obtiene la información de un proyecto dependiendo del id.
        /// </summary>
        /// <param name="idPerfil">Es el id del proyecto del cual se obtendrá la información.</param>
        /// <returns>Información del proyecto.</returns>
        public PerfilInfo GetPerfilById(int idPerfil)
        {
            return this.daoPerfiles.GetPerfilById(idPerfil);
        }

        /// <summary>
        /// Obtiene la lista de permisos asociados a un perfil
        /// </summary>
        /// <param name="idPerfil">Id del perfil asociado al permiso</param>
        /// <returns></returns>
        public List<PermisoInfo> GetPermisosByIdPerfil(int idPerfil)
        {
            return this.daoPerfiles.GetPermisosByIdPerfil(idPerfil).ToList();
        }

        /// <summary>
        /// Obtiene la lista de funciones
        /// </summary>
        /// <returns></returns>
        public List<PerfilUrlInfo> GetPerfilUrl()
        {
            return this.daoPerfilUrl.GetPerfilUrl().ToList();
        }

        /// <summary>
        /// Verifica la existencia de un perfil.
        /// </summary>
        /// <param name="nombrePerfil">Es el nombre del perfil.</param>
        /// <returns>Indicador de si el perfil existe o no.</returns>
        public bool VerifyExistPerfil(string nombrePerfil)
        {
            return this.daoPerfiles.VerifyExistPerfil(nombrePerfil);
        }

        #endregion
    }
}
